package com.ruoyi.common.utils.translate;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;

import java.util.ArrayList;
import java.util.List;

public class TranslateUtil {

    public String conversion(String s){
        ObjectMapper objectMapper = new ObjectMapper();
        String dstValue = null;
        try {
            ExceptionMethod(s);
            // 将 JSON 字符串转换为 JsonNode 对象
            JsonNode jsonNode = objectMapper.readTree(s);
            // 提取 "trans_result" 数组中第一个元素的 "dst" 值
            dstValue = jsonNode.get("trans_result").get(0).get("dst").asText();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return dstValue;
    }

    public List<String> batchConversion(String s){
        ObjectMapper objectMapper = new ObjectMapper();
        String dstValue = null;
        try {
            ExceptionMethod(s);
            // 将 JSON 字符串转换为 JsonNode 对象
            JsonNode jsonNode = objectMapper.readTree(s);
            // 提取 "trans_result" 数组中第一个元素的 "dst" 值

            ArrayNode transResultArray = (ArrayNode) jsonNode.get("trans_result");
            List<String> dstValues = new ArrayList<>();

            for (JsonNode transResult : transResultArray) {
                dstValue = transResult.get("dst").asText();
                dstValues.add(dstValue);
            }
            return dstValues;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new ArrayList<>();
    }

    /**
     * 解析百度API返回的错误信息，并根据不同的错误代码抛出相应的Exception。
     * 此方法用于处理包含错误代码和错误信息的JSON字符串，根据错误代码抛出具体的异常，以便调用者根据异常类型进行处理。
     *
     * @param s 包含错误代码和错误信息的JSON字符串
     * @throws JsonProcessingException 如果解析JSON字符串时出错
     * @throws IllegalArgumentException 根据错误代码抛出的具体异常
     */
    private void ExceptionMethod(String s) throws JsonProcessingException {
        boolean containsComma = s.contains("error_code");
        if (containsComma) {
            ObjectMapper objectMapper = new ObjectMapper();
            JsonNode jsonNode = objectMapper.readTree(s);
            String errorCode = jsonNode.get("error_code").asText();
            switch (errorCode) {
                case "52001":
                    throw new IllegalArgumentException("请求百度API超时");
                case "52002":
                    throw new IllegalArgumentException("请求百度API频率过快");
                case "52003":
                    throw new IllegalArgumentException("请检查appid是否正确或者服务是否开通");
                case "54000":
                    throw new IllegalArgumentException("请检查是否少传参数");
                case "54001":
                    throw new IllegalArgumentException("请检查您的签名是否正确");
                case "54003":
                    throw new IllegalArgumentException("请降低您的调用频率，或升级为高级版/尊享版");
                case "54004":
                    throw new IllegalArgumentException("账户余额不足");
                case "54005":
                    throw new IllegalArgumentException("请求频繁");
                case "58000":
                    throw new IllegalArgumentException("检查个人资料里填写的IP地址是否正确");
                case "58001":
                    throw new IllegalArgumentException("暂不支持该语种");
                case "58002":
                    throw new IllegalArgumentException("当前服务已关闭");
                case "90107":
                    throw new IllegalArgumentException("认证未通过或未生效");
                case "20003":
                    throw new IllegalArgumentException("请检查翻译内容是否正确");
                default:
                    throw new IllegalArgumentException("未知错误代码：" + errorCode);
            }
        }
    }

}
